#ifndef GUARD_POKEMON_ANIMATION_H
#define GUARD_POKEMON_ANIMATION_H

// Pokémon back animation sets
enum BackAnim
{
    BACK_ANIM_NONE,
    BACK_ANIM_H_VIBRATE,
    BACK_ANIM_H_SLIDE,
    BACK_ANIM_H_SPRING,
    BACK_ANIM_H_SPRING_REPEATED,
    BACK_ANIM_SHRINK_GROW,
    BACK_ANIM_GROW,
    BACK_ANIM_CIRCLE_COUNTERCLOCKWISE,
    BACK_ANIM_H_SHAKE,
    BACK_ANIM_V_SHAKE,
    BACK_ANIM_V_SHAKE_H_SLIDE,
    BACK_ANIM_V_STRETCH,
    BACK_ANIM_H_STRETCH,
    BACK_ANIM_GROW_STUTTER,
    BACK_ANIM_V_SHAKE_LOW,
    BACK_ANIM_TRIANGLE_DOWN,
    BACK_ANIM_CONCAVE_ARC_LARGE,
    BACK_ANIM_CONVEX_DOUBLE_ARC,
    BACK_ANIM_CONCAVE_ARC_SMALL,
    BACK_ANIM_DIP_RIGHT_SIDE,
    BACK_ANIM_SHRINK_GROW_VIBRATE,
    BACK_ANIM_JOLT_RIGHT,
    BACK_ANIM_SHAKE_FLASH_YELLOW,
    BACK_ANIM_SHAKE_GLOW_RED,
    BACK_ANIM_SHAKE_GLOW_GREEN,
    BACK_ANIM_SHAKE_GLOW_BLUE,
};

// Pokémon animation function ids (for front and back)
// Each front anim uses 1, and each back anim uses a set of 3
enum AnimFunctionIDs
{
    ANIM_V_SQUISH_AND_BOUNCE,
    ANIM_CIRCULAR_STRETCH_TWICE,
    ANIM_H_VIBRATE,
    ANIM_H_SLIDE,
    ANIM_V_SLIDE,
    ANIM_BOUNCE_ROTATE_TO_SIDES,
    ANIM_V_JUMPS_H_JUMPS,
    ANIM_ROTATE_TO_SIDES,
    ANIM_ROTATE_TO_SIDES_TWICE,
    ANIM_GROW_VIBRATE,
    ANIM_ZIGZAG_FAST,
    ANIM_SWING_CONCAVE,
    ANIM_SWING_CONCAVE_FAST,
    ANIM_SWING_CONVEX,
    ANIM_SWING_CONVEX_FAST,
    ANIM_H_SHAKE,
    ANIM_V_SHAKE,
    ANIM_CIRCULAR_VIBRATE,
    ANIM_TWIST,
    ANIM_SHRINK_GROW,
    ANIM_CIRCLE_C_CLOCKWISE,
    ANIM_GLOW_BLACK,
    ANIM_H_STRETCH,
    ANIM_V_STRETCH,
    ANIM_RISING_WOBBLE,
    ANIM_V_SHAKE_TWICE,
    ANIM_TIP_MOVE_FORWARD,
    ANIM_H_PIVOT,
    ANIM_V_SLIDE_WOBBLE,
    ANIM_H_SLIDE_WOBBLE,
    ANIM_V_JUMPS_BIG,
    ANIM_SPIN_LONG,
    ANIM_GLOW_ORANGE,
    ANIM_GLOW_RED,
    ANIM_GLOW_BLUE,
    ANIM_GLOW_YELLOW,
    ANIM_GLOW_PURPLE,
    ANIM_BACK_AND_LUNGE,
    ANIM_BACK_FLIP,
    ANIM_FLICKER,
    ANIM_BACK_FLIP_BIG,
    ANIM_FRONT_FLIP,
    ANIM_TUMBLING_FRONT_FLIP,
    ANIM_FIGURE_8,
    ANIM_FLASH_YELLOW,
    ANIM_SWING_CONCAVE_FAST_SHORT,
    ANIM_SWING_CONVEX_FAST_SHORT,
    ANIM_ROTATE_UP_SLAM_DOWN,
    ANIM_DEEP_V_SQUISH_AND_BOUNCE,
    ANIM_H_JUMPS,
    ANIM_H_JUMPS_V_STRETCH,
    ANIM_ROTATE_TO_SIDES_FAST,
    ANIM_ROTATE_UP_TO_SIDES,
    ANIM_FLICKER_INCREASING,
    ANIM_TIP_HOP_FORWARD,
    ANIM_PIVOT_SHAKE,
    ANIM_TIP_AND_SHAKE,
    ANIM_VIBRATE_TO_CORNERS,
    ANIM_GROW_IN_STAGES,
    ANIM_V_SPRING,
    ANIM_V_REPEATED_SPRING,
    ANIM_SPRING_RISING,
    ANIM_H_SPRING,
    ANIM_H_REPEATED_SPRING_SLOW,
    ANIM_H_SLIDE_SHRINK,
    ANIM_LUNGE_GROW,
    ANIM_CIRCLE_INTO_BG,
    ANIM_RAPID_H_HOPS,
    ANIM_FOUR_PETAL,
    ANIM_V_SQUISH_AND_BOUNCE_SLOW,
    ANIM_H_SLIDE_SLOW,
    ANIM_V_SLIDE_SLOW,
    ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL,
    ANIM_BOUNCE_ROTATE_TO_SIDES_SLOW,
    ANIM_BOUNCE_ROTATE_TO_SIDES_SMALL_SLOW,
    ANIM_ZIGZAG_SLOW,
    ANIM_H_SHAKE_SLOW,
    ANIM_V_SHAKE_SLOW,
    ANIM_TWIST_TWICE,
    ANIM_CIRCLE_C_CLOCKWISE_SLOW,
    ANIM_V_SHAKE_TWICE_SLOW,
    ANIM_V_SLIDE_WOBBLE_SMALL,
    ANIM_V_JUMPS_SMALL,
    ANIM_SPIN,
    ANIM_TUMBLING_FRONT_FLIP_TWICE,
    ANIM_DEEP_V_SQUISH_AND_BOUNCE_TWICE,
    ANIM_H_JUMPS_V_STRETCH_TWICE,
    ANIM_V_SHAKE_BACK,
    ANIM_V_SHAKE_BACK_SLOW,
    ANIM_V_SHAKE_H_SLIDE_SLOW,
    ANIM_V_STRETCH_BOTH_ENDS_SLOW,
    ANIM_H_STRETCH_FAR_SLOW,
    ANIM_V_SHAKE_LOW_TWICE,
    ANIM_H_SHAKE_FAST,
    ANIM_H_SLIDE_FAST,
    ANIM_H_VIBRATE_FAST,
    ANIM_H_VIBRATE_FASTEST,
    ANIM_V_SHAKE_BACK_FAST,
    ANIM_V_SHAKE_LOW_TWICE_SLOW,
    ANIM_V_SHAKE_LOW_TWICE_FAST,
    ANIM_CIRCLE_C_CLOCKWISE_LONG,
    ANIM_GROW_STUTTER_SLOW,
    ANIM_V_SHAKE_H_SLIDE,
    ANIM_V_SHAKE_H_SLIDE_FAST,
    ANIM_TRIANGLE_DOWN_SLOW,
    ANIM_TRIANGLE_DOWN,
    ANIM_TRIANGLE_DOWN_TWICE,
    ANIM_GROW,
    ANIM_GROW_TWICE,
    ANIM_H_SPRING_FAST,
    ANIM_H_SPRING_SLOW,
    ANIM_H_REPEATED_SPRING_FAST,
    ANIM_H_REPEATED_SPRING,
    ANIM_SHRINK_GROW_FAST,
    ANIM_SHRINK_GROW_SLOW,
    ANIM_V_STRETCH_BOTH_ENDS,
    ANIM_V_STRETCH_BOTH_ENDS_TWICE,
    ANIM_H_STRETCH_FAR_TWICE,
    ANIM_H_STRETCH_FAR,
    ANIM_GROW_STUTTER_TWICE,
    ANIM_GROW_STUTTER,
    ANIM_CONCAVE_ARC_LARGE_SLOW,
    ANIM_CONCAVE_ARC_LARGE,
    ANIM_CONCAVE_ARC_LARGE_TWICE,
    ANIM_CONVEX_DOUBLE_ARC_SLOW,
    ANIM_CONVEX_DOUBLE_ARC,
    ANIM_CONVEX_DOUBLE_ARC_TWICE,
    ANIM_CONCAVE_ARC_SMALL_SLOW,
    ANIM_CONCAVE_ARC_SMALL,
    ANIM_CONCAVE_ARC_SMALL_TWICE,
    ANIM_H_DIP,
    ANIM_H_DIP_FAST,
    ANIM_H_DIP_TWICE,
    ANIM_SHRINK_GROW_VIBRATE_FAST,
    ANIM_SHRINK_GROW_VIBRATE,
    ANIM_SHRINK_GROW_VIBRATE_SLOW,
    ANIM_JOLT_RIGHT_FAST,
    ANIM_JOLT_RIGHT,
    ANIM_JOLT_RIGHT_SLOW,
    ANIM_SHAKE_FLASH_YELLOW_FAST,
    ANIM_SHAKE_FLASH_YELLOW,
    ANIM_SHAKE_FLASH_YELLOW_SLOW,
    ANIM_SHAKE_GLOW_RED_FAST,
    ANIM_SHAKE_GLOW_RED,
    ANIM_SHAKE_GLOW_RED_SLOW,
    ANIM_SHAKE_GLOW_GREEN_FAST,
    ANIM_SHAKE_GLOW_GREEN,
    ANIM_SHAKE_GLOW_GREEN_SLOW,
    ANIM_SHAKE_GLOW_BLUE_FAST,
    ANIM_SHAKE_GLOW_BLUE,
    ANIM_SHAKE_GLOW_BLUE_SLOW,
    ANIM_SHAKE_GLOW_BLACK_SLOW,
    ANIM_SHAKE_GLOW_WHITE_SLOW,
    ANIM_SHAKE_GLOW_PURPLE_SLOW,
};

enum BackAnim GetSpeciesBackAnimSet(u16 species);
void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, enum AnimFunctionIDs frontAnimId);
void StartMonSummaryAnimation(struct Sprite *sprite, enum AnimFunctionIDs frontAnimId);
void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, enum BackAnim backAnimSet);
void SetSpriteCB_MonAnimDummy(struct Sprite *sprite);

#endif // GUARD_POKEMON_ANIMATION_H
